home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 February (DVD) / PCWorld_2008-02_DVD.iso / v cisle / PHP / PHP.exe / xampp-win32-1.6.5-installer.exe / phpMyAdmin / libraries / mult_submits.inc.php < prev    next >
Encoding:
PHP Script  |  2007-12-20  |  16.1 KB  |  436 lines

  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4.  *
  5.  * @version $Id: mult_submits.inc.php 10563 2007-08-18 12:46:30Z lem9 $
  6.  */
  7.  
  8. /**
  9.  * Prepares the work and runs some other scripts if required
  10.  */
  11. if (! empty($submit_mult)
  12.  && $submit_mult != $strWithChecked
  13.  && (! empty($selected_db)
  14.   || ! empty($selected_tbl)
  15.   || ! empty($selected_fld)
  16.   || ! empty($rows_to_delete))) {
  17.     define('PMA_SUBMIT_MULT', 1);
  18.     if (isset($selected_db) && !empty($selected_db)) {
  19.         $selected     = $selected_db;
  20.         $what         = 'drop_db';
  21.     } elseif (isset($selected_tbl) && !empty($selected_tbl)) {
  22.         if ($submit_mult == $strPrintView) {
  23.             require './tbl_printview.php';
  24.         } else {
  25.            $selected = $selected_tbl;
  26.            switch ($submit_mult) {
  27.                case 'drop_db':
  28.                    $what = 'drop_db';
  29.                    break;
  30.                case $strDrop:
  31.                    $what = 'drop_tbl';
  32.                    break;
  33.                case $strEmpty:
  34.                    $what = 'empty_tbl';
  35.                    break;
  36.                case $strCheckTable:
  37.                    unset($submit_mult);
  38.                    $query_type = 'check_tbl';
  39.                    $mult_btn   = $strYes;
  40.                    break;
  41.                case $strOptimizeTable:
  42.                    unset($submit_mult);
  43.                    $query_type = 'optimize_tbl';
  44.                    $mult_btn   = $strYes;
  45.                    break;
  46.                case $strRepairTable:
  47.                    unset($submit_mult);
  48.                    $query_type = 'repair_tbl';
  49.                    $mult_btn   = $strYes;
  50.                    break;
  51.                case $strAnalyzeTable:
  52.                    unset($submit_mult);
  53.                    $query_type = 'analyze_tbl';
  54.                    $mult_btn   = $strYes;
  55.                    break;
  56.            } // end switch
  57.         }
  58.     } elseif (isset($selected_fld) && !empty($selected_fld)) {
  59.         $selected     = $selected_fld;
  60.         switch ($submit_mult) {
  61.             case $strDrop:
  62.                 $what     = 'drop_fld';
  63.                 break;
  64.             case $strPrimary:
  65.                 // Gets table primary key
  66.                 PMA_DBI_select_db($db);
  67.                 $result      = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
  68.                 $primary     = '';
  69.                 while ($row = PMA_DBI_fetch_assoc($result)) {
  70.                     // Backups the list of primary keys
  71.                     if ($row['Key_name'] == 'PRIMARY') {
  72.                         $primary .= $row['Column_name'] . ', ';
  73.                     }
  74.                 } // end while
  75.                 PMA_DBI_free_result($result);
  76.                 if (empty($primary)) {
  77.                     // no primary key, so we can safely create new
  78.                     unset($submit_mult);
  79.                     $query_type = 'primary_fld';
  80.                     $mult_btn   = $strYes;
  81.                 } else {
  82.                     // primary key exists, so lets as user
  83.                     $what = 'primary_fld';
  84.                 }
  85.                 break;
  86.             case $strIndex:
  87.                 unset($submit_mult);
  88.                 $query_type = 'index_fld';
  89.                 $mult_btn   = $strYes;
  90.                 break;
  91.             case $strUnique:
  92.                 unset($submit_mult);
  93.                 $query_type = 'unique_fld';
  94.                 $mult_btn   = $strYes;
  95.                 break;
  96.             case $strIdxFulltext:
  97.                 unset($submit_mult);
  98.                 $query_type = 'fulltext_fld';
  99.                 $mult_btn   = $strYes;
  100.                 break;
  101.             case $strChange:
  102.                 require './tbl_alter.php';
  103.                 break;
  104.             case $strBrowse:
  105.                 $sql_query = '';
  106.                 foreach ($selected AS $idx => $sval) {
  107.                     if ($sql_query == '') {
  108.                         $sql_query .= 'SELECT ' . PMA_backquote(urldecode($sval));
  109.                     } else {
  110.                         $sql_query .=  ', ' . PMA_backquote(urldecode($sval));
  111.                     }
  112.                 }
  113.                 $sql_query .= ' FROM ' . PMA_backquote(htmlspecialchars($table));
  114.                 require './sql.php';
  115.                 break;
  116.         }
  117.     } else {
  118.         $what = 'row_delete';
  119.         $selected = $rows_to_delete;
  120.     }
  121. } // end if
  122.  
  123.  
  124. /**
  125.  * Displays the confirmation form if required
  126.  */
  127. if (!empty($submit_mult) && !empty($what)) {
  128.     $js_to_run = 'functions.js';
  129.     unset($message);
  130.     if (strlen($table)) {
  131.         require './libraries/tbl_common.php';
  132.         $url_query .= '&goto=tbl_sql.php&back=tbl_sql.php';
  133.         require './libraries/tbl_info.inc.php';
  134.     } elseif (strlen($db)) {
  135.         require './libraries/db_common.inc.php';
  136.         require './libraries/db_info.inc.php';
  137.     }
  138.     // Builds the query
  139.     $full_query     = '';
  140.     if ($what == 'drop_tbl') {
  141.         $full_query_views = '';
  142.     }
  143.     $selected_cnt   = count($selected);
  144.     $i = 0;
  145.     foreach ($selected AS $idx => $sval) {
  146.         switch ($what) {
  147.             case 'row_delete':
  148.                 $full_query .= htmlspecialchars(urldecode($sval))
  149.                     . ';<br />';
  150.                 break;
  151.             case 'drop_db':
  152.                 $full_query .= 'DROP DATABASE '
  153.                     . PMA_backquote(htmlspecialchars(urldecode($sval)))
  154.                     . ';<br />';
  155.                 $reload = 1;
  156.                 break;
  157.  
  158.             case 'drop_tbl':
  159.                 $current = urldecode($sval);
  160.                 if (!empty($views) && in_array($current, $views)) {
  161.                     $full_query_views .= (empty($full_query_views) ? 'DROP VIEW ' : ', ')
  162.                         . PMA_backquote(htmlspecialchars($current));
  163.                 } else {
  164.                     $full_query .= (empty($full_query) ? 'DROP TABLE ' : ', ')
  165.                         . PMA_backquote(htmlspecialchars($current));
  166.                 }
  167.                 break;
  168.  
  169.             case 'empty_tbl':
  170.                 if (PMA_MYSQL_INT_VERSION >= 40000) {
  171.                     $full_query .= 'TRUNCATE ';
  172.                 } else {
  173.                     $full_query .= 'DELETE FROM ';
  174.                 }
  175.                 $full_query .= PMA_backquote(htmlspecialchars(urldecode($sval)))
  176.                             . ';<br />';
  177.                 break;
  178.  
  179.             case 'primary_fld':
  180.                 if ($full_query == '') {
  181.                     $full_query .= 'ALTER TABLE '
  182.                         . PMA_backquote(htmlspecialchars($table))
  183.                         . '<br />  DROP PRIMARY KEY,'
  184.                         . '<br />   ADD PRIMARY KEY('
  185.                         . '<br />     '
  186.                         . PMA_backquote(htmlspecialchars(urldecode($sval)))
  187.                         . ',';
  188.                 } else {
  189.                     $full_query .= '<br />     '
  190.                         . PMA_backquote(htmlspecialchars(urldecode($sval)))
  191.                         . ',';
  192.                 }
  193.                 if ($i == $selected_cnt-1) {
  194.                     $full_query = preg_replace('@,$@', ');<br />', $full_query);
  195.                 }
  196.                 break;
  197.  
  198.             case 'drop_fld':
  199.                 if ($full_query == '') {
  200.                     $full_query .= 'ALTER TABLE '
  201.                         . PMA_backquote(htmlspecialchars($table))
  202.                         . '<br />  DROP '
  203.                         . PMA_backquote(htmlspecialchars(urldecode($sval)))
  204.                         . ',';
  205.                 } else {
  206.                     $full_query .= '<br />  DROP '
  207.                         . PMA_backquote(htmlspecialchars(urldecode($sval)))
  208.                         . ',';
  209.                 }
  210.                 if ($i == $selected_cnt-1) {
  211.                     $full_query = preg_replace('@,$@', ';<br />', $full_query);
  212.                 }
  213.                 break;
  214.         } // end switch
  215.         $i++;
  216.     }
  217.     if ($what == 'drop_tbl') {
  218.         if (!empty($full_query)) {
  219.             $full_query .= ';<br />' . "\n";
  220.         }
  221.         if (!empty($full_query_views)) {
  222.             $full_query .= $full_query_views . ';<br />' . "\n";
  223.         }
  224.         unset($full_query_views);
  225.     }
  226.  
  227.     // Displays the form
  228.     ?>
  229. <!-- Do it really ? -->
  230. <form action="<?php echo $action; ?>" method="post">
  231. <input type="hidden" name="query_type" value="<?php echo $what; ?>" />
  232.     <?php
  233.     if (strpos(' ' . $action, 'db_') == 1) {
  234.         echo PMA_generate_common_hidden_inputs($db);
  235.     } elseif (strpos(' ' . $action, 'tbl_') == 1
  236.               || $what == 'row_delete') {
  237.         echo PMA_generate_common_hidden_inputs($db, $table);
  238.     } else  {
  239.         echo PMA_generate_common_hidden_inputs();
  240.     }
  241. ?>
  242. <input type="hidden" name="reload" value="<?php echo isset($reload) ? PMA_sanitize($reload) : 0; ?>" />
  243. <?php
  244.     foreach ($selected as $idx => $sval) {
  245.         echo '<input type="hidden" name="selected[]" value="' . htmlspecialchars($sval) . '" />' . "\n";
  246.     }
  247.     if ($what == 'drop_tbl' && !empty($views)) {
  248.         foreach ($views as $current) {
  249.            echo '<input type="hidden" name="views[]" value="' . htmlspecialchars($current) . '" />' . "\n";
  250.        }
  251.     }
  252.     if ($what == 'row_delete') {
  253.         echo '<input type="hidden" name="original_sql_query" value="' . htmlspecialchars($original_sql_query) . '" />' . "\n";
  254.         echo '<input type="hidden" name="original_url_query" value="' . htmlspecialchars($original_url_query) . '" />' . "\n";
  255.     }
  256.     ?>
  257. <fieldset class="confirmation">
  258.     <legend><?php echo ($what == 'drop_db' ? $strDropDatabaseStrongWarning . ' ' : '') . $strDoYouReally; ?>:</legend>
  259.     <tt><?php echo $full_query; ?></tt>
  260. </fieldset>
  261. <fieldset class="tblFooters">
  262.     <input type="submit" name="mult_btn" value="<?php echo $strYes; ?>" id="buttonYes" />
  263.     <input type="submit" name="mult_btn" value="<?php echo $strNo; ?>" id="buttonNo" />
  264. </fieldset>
  265.     <?php
  266.     require_once './libraries/footer.inc.php';
  267. } // end if
  268.  
  269.  
  270. /**
  271.  * Executes the query
  272.  */
  273. elseif ($mult_btn == $strYes) {
  274.  
  275.     if ($query_type == 'drop_db' || $query_type == 'drop_tbl' || $query_type == 'drop_fld') {
  276.         require_once './libraries/relation_cleanup.lib.php';
  277.     }
  278.  
  279.     $sql_query      = '';
  280.     if ($query_type == 'drop_tbl') {
  281.         $sql_query_views = '';
  282.     }
  283.     $selected_cnt   = count($selected);
  284.     $run_parts      = FALSE; // whether to run query after each pass
  285.     $use_sql        = FALSE; // whether to include sql.php at the end (to display results)
  286.  
  287.     if ($query_type == 'primary_fld') {
  288.         // Gets table primary key
  289.         PMA_DBI_select_db($db);
  290.         $result      = PMA_DBI_query('SHOW KEYS FROM ' . PMA_backquote($table) . ';');
  291.         $primary     = '';
  292.         while ($row = PMA_DBI_fetch_assoc($result)) {
  293.             // Backups the list of primary keys
  294.             if ($row['Key_name'] == 'PRIMARY') {
  295.                 $primary .= $row['Column_name'] . ', ';
  296.             }
  297.         } // end while
  298.         PMA_DBI_free_result($result);
  299.     }
  300.  
  301.     $rebuild_database_list = false;
  302.  
  303.     for ($i = 0; $i < $selected_cnt; $i++) {
  304.         switch ($query_type) {
  305.             case 'row_delete':
  306.                 $a_query = urldecode($selected[$i]);
  307.                 $run_parts = TRUE;
  308.                 break;
  309.  
  310.             case 'drop_db':
  311.                 PMA_relationsCleanupDatabase($selected[$i]);
  312.                 $a_query   = 'DROP DATABASE '
  313.                            . PMA_backquote(urldecode($selected[$i]));
  314.                 $reload    = 1;
  315.                 $run_parts = TRUE;
  316.                 $rebuild_database_list = true;
  317.                 break;
  318.  
  319.             case 'drop_tbl':
  320.                 PMA_relationsCleanupTable($db, $selected[$i]);
  321.                 $current = urldecode($selected[$i]);
  322.                 if (!empty($views) && in_array($current, $views)) {
  323.                     $sql_query_views .= (empty($sql_query_views) ? 'DROP VIEW ' : ', ')
  324.                               . PMA_backquote($current);
  325.                 } else {
  326.                     $sql_query .= (empty($sql_query) ? 'DROP TABLE ' : ', ')
  327.                                . PMA_backquote($current);
  328.                 }
  329.                 $reload    = 1;
  330.                 break;
  331.  
  332.             case 'check_tbl':
  333.                 $sql_query .= (empty($sql_query) ? 'CHECK TABLE ' : ', ')
  334.                            . PMA_backquote(urldecode($selected[$i]));
  335.                 $use_sql    = TRUE;
  336.                 break;
  337.  
  338.             case 'optimize_tbl':
  339.                 $sql_query .= (empty($sql_query) ? 'OPTIMIZE TABLE ' : ', ')
  340.                            . PMA_backquote(urldecode($selected[$i]));
  341.                 $use_sql    = TRUE;
  342.                 break;
  343.  
  344.             case 'analyze_tbl':
  345.                 $sql_query .= (empty($sql_query) ? 'ANALYZE TABLE ' : ', ')
  346.                            . PMA_backquote(urldecode($selected[$i]));
  347.                 $use_sql    = TRUE;
  348.                 break;
  349.  
  350.             case 'repair_tbl':
  351.                 $sql_query .= (empty($sql_query) ? 'REPAIR TABLE ' : ', ')
  352.                            . PMA_backquote(urldecode($selected[$i]));
  353.                 $use_sql    = TRUE;
  354.                 break;
  355.  
  356.             case 'empty_tbl':
  357.                 if (PMA_MYSQL_INT_VERSION >= 40000) {
  358.                     $a_query = 'TRUNCATE ';
  359.                 } else {
  360.                     $a_query = 'DELETE FROM ';
  361.                 }
  362.                 $a_query .= PMA_backquote(htmlspecialchars(urldecode($selected[$i])));
  363.                 $run_parts = TRUE;
  364.                 break;
  365.  
  366.             case 'drop_fld':
  367.                 PMA_relationsCleanupColumn($db, $table, $selected[$i]);
  368.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) : ',')
  369.                            . ' DROP ' . PMA_backquote(urldecode($selected[$i]))
  370.                            . (($i == $selected_cnt-1) ? ';' : '');
  371.                 break;
  372.  
  373.             case 'primary_fld':
  374.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . (empty($primary) ? '' : ' DROP PRIMARY KEY,') . ' ADD PRIMARY KEY( ' : ', ')
  375.                            . PMA_backquote(urldecode($selected[$i]))
  376.                            . (($i == $selected_cnt-1) ? ');' : '');
  377.                 break;
  378.  
  379.             case 'index_fld':
  380.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD INDEX( ' : ', ')
  381.                            . PMA_backquote(urldecode($selected[$i]))
  382.                            . (($i == $selected_cnt-1) ? ');' : '');
  383.                 break;
  384.  
  385.             case 'unique_fld':
  386.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD UNIQUE( ' : ', ')
  387.                            . PMA_backquote(urldecode($selected[$i]))
  388.                            . (($i == $selected_cnt-1) ? ');' : '');
  389.                 break;
  390.  
  391.             case 'fulltext_fld':
  392.                 $sql_query .= (empty($sql_query) ? 'ALTER TABLE ' . PMA_backquote($table) . ' ADD FULLTEXT( ' : ', ')
  393.                            . PMA_backquote(urldecode($selected[$i]))
  394.                            . (($i == $selected_cnt-1) ? ');' : '');
  395.                 break;
  396.         } // end switch
  397.  
  398.         // All "DROP TABLE", "DROP FIELD", "OPTIMIZE TABLE" and "REPAIR TABLE"
  399.         // statements will be run at once below
  400.         if ($run_parts) {
  401.             $sql_query .= $a_query . ';' . "\n";
  402.             if ($query_type != 'drop_db') {
  403.                 PMA_DBI_select_db($db);
  404.             }
  405.             $result = @PMA_DBI_query($a_query) or PMA_mysqlDie('', $a_query, FALSE, $err_url);
  406.         } // end if
  407.     } // end for
  408.  
  409.     if ($query_type == 'drop_tbl') {
  410.         if (!empty($sql_query)) {
  411.         $sql_query .= ';';
  412.     } elseif (!empty($sql_query_views)) {
  413.         $sql_query = $sql_query_views . ';';
  414.             unset($sql_query_views);
  415.         }
  416.     }
  417.  
  418.     if ($use_sql) {
  419.         require './sql.php';
  420.     } elseif (!$run_parts) {
  421.         PMA_DBI_select_db($db);
  422.         $result = PMA_DBI_query($sql_query);
  423.         if (!empty($sql_query_views)) {
  424.             $sql_query .= ' ' . $sql_query_views . ';';
  425.             PMA_DBI_query($sql_query_views);
  426.             unset($sql_query_views);
  427.         }
  428.     }
  429.     if ($rebuild_database_list) {
  430.         // avoid a problem with the database list navigator
  431.         // when dropping a db from server_databases
  432.         $GLOBALS['PMA_List_Database']->build();
  433.     }
  434. }
  435. ?>
  436.